Versi 1
| Field | Isi |
|---|---|
| Dokumen ID | VBS-STK-002 |
| Deskripsi | Stock opname: mencatat hasil hitung fisik stok per cabang pada waktu awal hari, akhir hari, atau real time, membandingkannya dengan stok sistem, lalu menyimpan draft atau final |
| Nomor Revisi | 1 |
| Tanggal | 2026-10-04 |
| Keterangan | Dokumentasi baseline dari dokumentasi fitur demo dan kode FE |
1. Ringkasan
a. In scope
- User melihat daftar invoice stock opname (nama invoice, tanggal, waktu stock opname, cabang, status Draft / Selesai)
- User memfilter daftar berdasarkan periode, cabang, status Draft / Selesai, dan nama invoice
- User membuat invoice stock opname: nama invoice opsional, tanggal, lokasi (opsional), cabang, dan waktu stock opname Awal Hari / Akhir Hari / Real Time
- User menginput hasil hitung fisik barang lewat scan barcode atau tambah manual, per etalase, dengan pilihan mengosongkan stok barang lain yang tidak dihitung
- User meninjau rangkuman total qty fisik, dan (dengan hak akses) membandingkan dengan stok sistem dan selisihnya
- User menyimpan sebagai draft untuk dilanjutkan nanti atau menyimpan final
- User melihat detail hasil: stok fisik sesuai, kurang, dan lebih beserta HPP, lalu mengekspor ke Excel
- User berwenang membuka kembali invoice final ke draft, menghitung ulang selisih stok, dan mengatur akun beban stok kurang
b. Catatan
c. Kesimpulan
- [FE] -
- [BE] -
2. Functional Requirement
| Kode | Deskripsi |
|---|---|
| FR-01 | Sistem menampilkan daftar invoice stock opname dengan pagination, filter, dan baris expand untuk invoice selesai |
| FR-02 | Sistem membatasi daftar ke invoice milik user sendiri jika user tidak punya hak akses lihat semua user |
| FR-03 | User dapat membuat dan mengubah informasi invoice stock opname (tanggal, cabang, waktu wajib) |
| FR-04 | Sistem menyediakan tiga pilihan waktu stock opname: Awal Hari, Akhir Hari, Real Time |
| FR-05 | User dapat menambah, mengubah, dan menghapus baris hitung fisik barang langsung tersimpan per baris |
| FR-06 | User dapat menandai "Kosongkan Barang Lain" agar barang yang tidak diinput dianggap kosong |
| FR-07 | Sistem membentuk rekap stock opname per SKU dalam satuan terkecil |
| FR-08 | User dengan hak akses cross check stok dapat melihat stok sistem dan selisih di rangkuman |
| FR-09 | User dapat menyimpan draft atau menyimpan final invoice stock opname |
| FR-10 | User dapat melihat detail hasil stock opname per kategori sesuai / kurang / lebih dan mengekspornya ke Excel |
| FR-11 | User berwenang dapat mengubah invoice final kembali ke draft |
| FR-12 | User dapat menghitung ulang selisih stok invoice stock opname |
| FR-13 | User berwenang dapat mengatur akun beban untuk stok kurang |
3. Use Case List
| Kode | Deskripsi |
|---|---|
| UC-01 | Melihat dan memfilter daftar stock opname |
| UC-02 | Membuat invoice stock opname |
| UC-03 | Menginput hasil hitung fisik barang |
| UC-04 | Meninjau rangkuman dan menyimpan final stock opname |
| UC-05 | Menyimpan draft dan melanjutkan stock opname |
| UC-06 | Melihat detail hasil stock opname dan mengekspor Excel |
| UC-07 | Membuka kembali (unlock) stock opname final ke draft |
| UC-08 | Menghitung ulang selisih stok |
| UC-09 | Mengatur akun beban stok kurang |
4. Use Case Scenario
UC-01 : Melihat dan memfilter daftar stock opname
| Aktor | User brand dengan hak akses stok opname |
| Deskripsi | User melihat daftar invoice stock opname dan menyaringnya |
| Prekondisi | User sudah login di brand aktif |
| Alur utama | 1. User membuka menu Inventory, Stock Opname. 2. Sistem menampilkan daftar (nama invoice, tanggal, waktu stock opname, cabang, status). 3. User mengisi filter periode, cabang, status, atau nama invoice. 4. Sistem memuat ulang daftar. 5. Untuk invoice selesai, user dapat membuka expand baris untuk melihat ringkasan barang. |
| Alur negatif | - Jika tidak ada data, tabel menampilkan "Stok Opname Kosong". - Jika gagal memuat, daftar dikosongkan. |
| Bisnis rule | - User tanpa hak akses lihat semua user hanya melihat invoice miliknya. - Status mengikuti nilai final: final tampil Selesai, selain itu Draft. |
| Postkondisi | Daftar stock opname sesuai filter tampil |
| Trigger | User membuka halaman Stock Opname |
| Kode FR | FR-01 FR-02 |
UC-02 : Membuat invoice stock opname
| Aktor | User brand dengan hak akses basic stok opname |
| Deskripsi | User membuat kepala invoice stock opname sebelum menghitung barang |
| Prekondisi | Master cabang tersedia |
| Alur utama | 1. User klik Tambah. 2. User mengisi nama invoice (opsional), tanggal, lokasi (opsional), cabang, dan waktu stock opname. 3. User klik Simpan Invoice. 4. Sistem membuat invoice draft dan menampilkan form input barang. |
| Alur negatif | - Jika tanggal, cabang, atau waktu kosong, muncul alert "Tolong lengkapi form dengan benar!". - Jika server gagal, muncul alert dengan pesan server. |
| Bisnis rule | - Waktu stock opname hanya Awal Hari, Akhir Hari, atau Real Time. - Nama invoice boleh kosong, nomor dibuat otomatis. - Invoice dibuat dengan status belum final dan "kosongkan barang lain" bernilai tidak. - Memilih cabang mengisi lokasi otomatis dari lokasi cabang. Field lokasi hanya tampil jika fitur #lokasi aktif.- Setelah tersimpan, informasi invoice masih dapat diubah melalui tombol Edit. |
| Postkondisi | Alert "Berhasil buat Invoice Stok Opname" dan form laporan barang terbuka |
| Trigger | User klik Simpan Invoice |
| Kode FR | FR-03 FR-04 |
UC-03 : Menginput hasil hitung fisik barang
| Aktor | User brand dengan hak akses basic stok opname |
| Deskripsi | User mencatat kuantitas fisik tiap barang yang dihitung |
| Prekondisi | Invoice stock opname sudah dibuat dan masih draft |
| Alur utama | 1. User scan barcode atau memilih barang secara manual. 2. User memilih satuan dan mengisi qty (jika tidak diisi, qty dianggap 1 per scan). 3. Sistem menyimpan baris ke server dan menampilkan notifikasi berhasil. 4. User dapat menambah etalase untuk memisah hitungan per rak. 5. User dapat mengubah atau menghapus baris. 6. User dapat mencentang "Kosongkan Barang Lain ?". |
| Alur negatif | - Jika simpan baris gagal, muncul alert dengan pesan server. - Jika user klik Selanjutnya tanpa baris, muncul notifikasi "Data Stok Opname harus diisi". |
| Bisnis rule | - Barang dan satuan yang sama dalam satu etalase digabung, qty ditambahkan ke baris yang ada. - Qty disimpan dalam satuan terkecil. - Rekap menjumlahkan qty semua etalase per SKU dalam satuan terkecil. |
| Postkondisi | Baris hitung fisik tersimpan pada invoice |
| Trigger | User scan / tambah barang |
| Kode FR | FR-05 FR-06 FR-07 |
UC-04 : Meninjau rangkuman dan menyimpan final stock opname
| Aktor | User brand dengan hak akses basic stok opname |
| Deskripsi | User memeriksa total hitung fisik lalu memfinalkan stock opname |
| Prekondisi | Minimal satu baris hitung fisik ada |
| Alur utama | 1. User klik Selanjutnya. 2. Sistem membentuk ulang rekap stock opname dan menampilkan rangkuman total qty per SKU. 3. User dengan hak akses dapat mengaktifkan "Lihat evaluasi stok opname" untuk melihat stok sistem dan selisih. 4. User klik Konfirmasi, lalu "Iya" pada dialog. 5. Sistem menyimpan invoice sebagai final dan kembali ke daftar. |
| Alur negatif | - Jika user klik Kembali, sistem kembali ke form input barang. - Jika simpan final gagal, muncul notifikasi error. |
| Bisnis rule | - Evaluasi stok (stok sistem dan selisih) hanya untuk hak akses #cross-check-stok.- Selisih = qty lebih dikurangi qty kurang. |
| Postkondisi | Notifikasi "Berhasil Simpan Final Stok Opname", status Selesai |
| Trigger | User klik Selanjutnya lalu Konfirmasi |
| Kode FR | FR-07 FR-08 FR-09 |
UC-05 : Menyimpan draft dan melanjutkan stock opname
| Aktor | User brand dengan hak akses basic stok opname |
| Deskripsi | User menyimpan sementara hasil hitung dan melanjutkannya nanti |
| Prekondisi | Invoice masih draft |
| Alur utama | 1. User klik Simpan Draft di form input barang. 2. Sistem menyimpan status "kosongkan barang lain" bila berubah, membentuk ulang rekap, dan kembali ke daftar. 3. Kemudian user klik Edit pada invoice draft. 4. Sistem memuat invoice dan baris hitung yang sudah ada. 5. User melanjutkan UC-03 dan UC-04. |
| Alur negatif | - Jika invoice tidak ditemukan saat edit, user dikembalikan ke daftar dengan alert pesan error. |
| Bisnis rule | - Menu Edit hanya muncul untuk invoice draft. |
| Postkondisi | Notifikasi "Berhasil berhasil di simpan draft", invoice tetap Draft |
| Trigger | User klik Simpan Draft / Edit |
| Kode FR | FR-05 FR-09 |
UC-06 : Melihat detail hasil stock opname dan mengekspor Excel
| Aktor | User brand dengan hak akses view stok opname |
| Deskripsi | User melihat hasil perbandingan stok fisik dengan stok seharusnya |
| Prekondisi | Invoice ada |
| Alur utama | 1. User klik Lihat atau klik baris. 2. Sistem menampilkan waktu, tanggal, lokasi, cabang, akun beban stok kurang. 3. Sistem menampilkan rekap stok dalam tab Stok Fisik Sesuai, Kurang, dan Lebih dengan qty fisik, qty sesungguhnya, HPP, dan total. 4. User klik Export untuk mengunduh Excel tiga sheet. |
| Alur negatif | - Jika gagal memuat detail, muncul alert pesan error. |
| Bisnis rule | - Nilai HPP dan total mengikuti hasil rekap di server. |
| Postkondisi | Detail tampil atau file Excel terunduh |
| Trigger | User klik Lihat |
| Kode FR | FR-10 |
UC-07 : Membuka kembali (unlock) stock opname final ke draft
| Aktor | User brand dengan hak akses draft stok opname |
| Deskripsi | User mengembalikan invoice final ke draft agar hitungan dapat dikoreksi |
| Prekondisi | Invoice berstatus Selesai |
| Alur utama | 1. User klik "Ubah ke Simpan Draft". 2. Sistem membuka kunci invoice. 3. Status baris berubah menjadi Draft. |
| Alur negatif | - Jika server menolak, muncul notifikasi error. |
| Bisnis rule | - Butuh hak akses #can-draft dan hak draft pada #stok-opname. |
| Postkondisi | Notifikasi "Berhasil Ubah Stok Opname dengan no invoice (nomor) ke Draft" |
| Trigger | User klik Ubah ke Simpan Draft |
| Kode FR | FR-11 |
UC-08 : Menghitung ulang selisih stok
| Aktor | User brand |
| Deskripsi | User meminta sistem menghitung ulang rekap dan selisih stok terhadap stok sistem terkini |
| Prekondisi | Invoice memiliki baris hitung |
| Alur utama | 1. User klik "Hitung Ulang Selisih Stok". 2. Sistem membentuk ulang rekap stock opname. 3. Sistem menampilkan notifikasi berhasil. |
| Alur negatif | - Jika gagal, muncul notifikasi error. |
| Bisnis rule | - |
| Postkondisi | Notifikasi "Berhasil Itung Ulang Stok" |
| Trigger | User klik Hitung Ulang Selisih Stok |
| Kode FR | FR-12 |
UC-09 : Mengatur akun beban stok kurang
| Aktor | User brand dengan hak akses beban stok kurang |
| Deskripsi | User menentukan akun beban untuk mencatat nilai stok yang kurang |
| Prekondisi | User punya hak akses #beban-stok-kurang |
| Alur utama | 1. User klik "Beban Stok Kurang" pada baris invoice. 2. Sistem membuka modal ubah akun beban stok. 3. User memilih akun lalu menyimpan. 4. Sistem memperbarui akun beban invoice. |
| Alur negatif | - Jika akun kosong, muncul pesan "Nama Akun harus di isi". - Jika server gagal, muncul notifikasi error. |
| Bisnis rule | - Akun dipilih dari master akun perkiraan. |
| Postkondisi | Notifikasi "Berhasil update Akun Beban" |
| Trigger | User klik Beban Stok Kurang |
| Kode FR | FR-13 |
5. Data Flow Diagram
DFD-01 — Alur data stock opname
6. Sequence Diagram
SD-01 — UC-01 : Melihat dan memfilter daftar stock opname
SD-02 — UC-02 : Membuat invoice stock opname
SD-03 — UC-03 : Menginput hasil hitung fisik barang
SD-04 — UC-04 : Meninjau rangkuman dan menyimpan final stock opname
SD-05 — UC-05 : Menyimpan draft dan melanjutkan stock opname
SD-06 — UC-06 : Melihat detail hasil stock opname dan mengekspor Excel
SD-07 — UC-07 : Membuka kembali (unlock) stock opname final ke draft
SD-08 — UC-08 : Menghitung ulang selisih stok
SD-09 — UC-09 : Mengatur akun beban stok kurang
7. Table Schema
8. API Schema
| Endpoint | Status | Perubahan |
|---|---|---|
GET /invoice-stok-opname | existing | - |
GET /invoice-stok-opname/:id | existing | - |
POST /invoice-stok-opname | existing | - |
PUT /invoice-stok-opname/:id | existing | - |
PUT /invoice-stok-opname/unlock/:id | existing | - |
POST /stok-opname | existing | - |
PUT /stok-opname/:id | existing | - |
DELETE /stok-opname/:id | existing | - |
GET /rekap-stok-opname | existing | - |
POST /rekap-stok-opname | existing | - |
DELETE /rekap-stok-opname/by-invoice/:invoice_stok_opname_id | existing | - |